행렬의 곱셈

📔 문제 설명

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

📓 제약 조건

📓 입출력의 예

arr1 arr2 return
[ [1, 4], [3, 2], [4, 1] ] [ [3, 3], [3, 3] ] [ [15, 15], [15, 15], [15, 15] ]
[ [2, 3, 2], [4, 2, 4], [3, 1, 4] ] [ [5, 4, 3], [2, 4, 1], [3, 1, 1] ] [ [22, 22, 11], [36, 28, 18], [29, 20, 14] ]

❗ 1번째

이 문제는 다소 복잡하게 보일지 몰라도 행렬의 곱셈의 규칙을 알면 쉽게 풀어낼수있는 문제이다
첫번째로 해야할일은 리턴해줄 2차원배열의 초기화 그리고 행렬의 곱셈을 해줄 로직이다

✅ 실행 코드

function solution(arr1, arr2) {
  const result = Array(arr1.length).fill().map(() => Array(arr2[0].length).fill(0)); // 답으로 쓸 2차원 배열 만들기 행수와 열수를 받아서 곱한다고 생각하면 편함

  for (let i = 0; i < arr1.length; i++) { // arr1의 행
    for (let j = 0; j < arr2[0].length; j++) { // arr2의 열
      let sum = 0;
      for (let k = 0; k < arr2.length; k++) { // 계산을 위한 인덱스
        sum += arr1[i][k] * arr2[k][j]; // 대응하는 값을 곱함을 반복하여 계속 더해줌
      }
      result[i][j] = sum; //최종 행렬 값을 2차원 배열에 담아줌
    }
  }
  
  return result;
}

📚 문제 느낀점

첫번째로 2차원 배열의 초기화에서 조금 많이 머뭇거렷고 이 문제를 위해 행렬의 곱을 복습을 한번했습니다.

크게 어렵지 않은 문제였지만 행렬의 곱의 방식을 몰랐다면 계산하는 로직을 헷갈릴거같았습니다.


© 문제 출처

저자 출제